/**********************************************************
        线程调度头文件krlsched_t.h
***********************************************************
                彭东 
**********************************************************/
#ifndef _KRLSCHED_T_H
#define _KRLSCHED_T_H
#define NOTS_SCHED_FLGS (0)
#define NEED_SCHED_FLGS (1)
#define NEED_START_CPUILDE_SCHED_FLGS (2)
#define PMPT_FLGS 0

typedef struct s_THRDLST
{
    list_h_t tdl_lsth;      // 挂载进程的链表头
    thread_t *tdl_curruntd; // 该链表上正运行的进程
    uint_t tdl_nr;          // 该链表上的进程个数
} thrdlst_t;

typedef struct s_SCHDATA
{
    spinlock_t sda_lock;
    uint_t sda_cpuid;                // 当前cpu id
    uint_t sda_schdflgs;             // 标志
    uint_t sda_premptidx;            // 进程抢占计数
    uint_t sda_threadnr;             // 进程数
    uint_t sda_prityidx;             // 当前优先级
    thread_t *sda_cpuidle;           // 当前 cpu 空转进程
    thread_t *sda_currtd;            // 当前正在运行的进程
    thrdlst_t sda_thdlst[PRITY_MAX]; // 进程链表数组
} schdata_t;

typedef struct s_SCHEDCALSS
{
    spinlock_t scls_lock;
    uint_t scls_cpunr;                 // cpu 个数
    uint_t scls_threadnr;              // 所有进程个数
    uint_t scls_threadid_inc;          // 分配进程 id 所用
    schdata_t scls_schda[CPUCORE_MAX]; // 每个 cpu 调度数据结构
} schedclass_t; // 全局调度数据

#endif // KRLSCHED_T_H
